home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / bluetooth / hci.h < prev    next >
C/C++ Source or Header  |  2006-04-12  |  40KB  |  1,589 lines

  1. /*
  2.  *
  3.  *  BlueZ - Bluetooth protocol stack for Linux
  4.  *
  5.  *  Copyright (C) 2000-2001  Qualcomm Incorporated
  6.  *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
  7.  *  Copyright (C) 2002-2005  Marcel Holtmann <marcel@holtmann.org>
  8.  *
  9.  *
  10.  *  This program is free software; you can redistribute it and/or modify
  11.  *  it under the terms of the GNU General Public License as published by
  12.  *  the Free Software Foundation; either version 2 of the License, or
  13.  *  (at your option) any later version.
  14.  *
  15.  *  This program is distributed in the hope that it will be useful,
  16.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  *  GNU General Public License for more details.
  19.  *
  20.  *  You should have received a copy of the GNU General Public License
  21.  *  along with this program; if not, write to the Free Software
  22.  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  23.  *
  24.  */
  25.  
  26. #ifndef __HCI_H
  27. #define __HCI_H
  28.  
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32.  
  33. #include <sys/socket.h>
  34.  
  35. #define HCI_MAX_DEV    16
  36.  
  37. #define HCI_MAX_ACL_SIZE    1024
  38. #define HCI_MAX_SCO_SIZE    255
  39. #define HCI_MAX_EVENT_SIZE    260
  40. #define HCI_MAX_FRAME_SIZE    (HCI_MAX_ACL_SIZE + 4)
  41.  
  42. /* HCI dev events */
  43. #define HCI_DEV_REG    1
  44. #define HCI_DEV_UNREG    2
  45. #define HCI_DEV_UP    3
  46. #define HCI_DEV_DOWN    4
  47. #define HCI_DEV_SUSPEND    5
  48. #define HCI_DEV_RESUME    6
  49.  
  50. /* HCI device types */
  51. #define HCI_VHCI    0
  52. #define HCI_USB        1
  53. #define HCI_PCCARD    2
  54. #define HCI_UART    3
  55. #define HCI_RS232    4
  56. #define HCI_PCI        5
  57.  
  58. /* HCI device flags */
  59. enum {
  60.     HCI_UP,
  61.     HCI_INIT,
  62.     HCI_RUNNING,
  63.  
  64.     HCI_PSCAN,
  65.     HCI_ISCAN,
  66.     HCI_AUTH,
  67.     HCI_ENCRYPT,
  68.     HCI_INQUIRY,
  69.  
  70.     HCI_RAW,
  71.  
  72.     HCI_SECMGR
  73. };
  74.  
  75. /* HCI ioctl defines */
  76. #define HCIDEVUP    _IOW('H', 201, int)
  77. #define HCIDEVDOWN    _IOW('H', 202, int)
  78. #define HCIDEVRESET    _IOW('H', 203, int)
  79. #define HCIDEVRESTAT    _IOW('H', 204, int)
  80.  
  81. #define HCIGETDEVLIST    _IOR('H', 210, int)
  82. #define HCIGETDEVINFO    _IOR('H', 211, int)
  83. #define HCIGETCONNLIST    _IOR('H', 212, int)
  84. #define HCIGETCONNINFO    _IOR('H', 213, int)
  85.  
  86. #define HCISETRAW    _IOW('H', 220, int)
  87. #define HCISETSCAN    _IOW('H', 221, int)
  88. #define HCISETAUTH    _IOW('H', 222, int)
  89. #define HCISETENCRYPT    _IOW('H', 223, int)
  90. #define HCISETPTYPE    _IOW('H', 224, int)
  91. #define HCISETLINKPOL    _IOW('H', 225, int)
  92. #define HCISETLINKMODE    _IOW('H', 226, int)
  93. #define HCISETACLMTU    _IOW('H', 227, int)
  94. #define HCISETSCOMTU    _IOW('H', 228, int)
  95.  
  96. #define HCISETSECMGR    _IOW('H', 230, int)
  97.  
  98. #define HCIINQUIRY    _IOR('H', 240, int)
  99.  
  100. /* HCI timeouts */
  101.  
  102. #define HCI_CONN_TIMEOUT    (HZ * 40)
  103. #define HCI_DISCONN_TIMEOUT    (HZ * 2)
  104. #define HCI_CONN_IDLE_TIMEOUT    (HZ * 60)
  105.  
  106. #ifndef __NO_HCI_DEFS
  107.  
  108. /* HCI Packet types */
  109. #define HCI_COMMAND_PKT        0x01
  110. #define HCI_ACLDATA_PKT        0x02
  111. #define HCI_SCODATA_PKT        0x03
  112. #define HCI_EVENT_PKT        0x04
  113. #define HCI_VENDOR_PKT        0xff
  114.  
  115. /* HCI Packet types */
  116. #define HCI_2DH1    0x0002
  117. #define HCI_3DH1    0x0004
  118. #define HCI_DM1        0x0008
  119. #define HCI_DH1        0x0010
  120. #define HCI_2DH3    0x0100
  121. #define HCI_3DH3    0x0200
  122. #define HCI_DM3        0x0400
  123. #define HCI_DH3        0x0800
  124. #define HCI_2DH5    0x1000
  125. #define HCI_3DH5    0x2000
  126. #define HCI_DM5        0x4000
  127. #define HCI_DH5        0x8000
  128.  
  129. #define HCI_HV1        0x0020
  130. #define HCI_HV2        0x0040
  131. #define HCI_HV3        0x0080
  132.  
  133. #define HCI_EV3        0x0008
  134. #define HCI_EV4        0x0010
  135. #define HCI_EV5        0x0020
  136. #define HCI_2EV3    0x0040
  137. #define HCI_3EV3    0x0080
  138. #define HCI_2EV5    0x0100
  139. #define HCI_3EV5    0x0200
  140.  
  141. #define SCO_PTYPE_MASK    (HCI_HV1 | HCI_HV2 | HCI_HV3)
  142. #define ACL_PTYPE_MASK    (HCI_DM1 | HCI_DH1 | HCI_DM3 | HCI_DH3 | HCI_DM5 | HCI_DH5)
  143.  
  144. /* HCI Error codes */
  145. #define HCI_UNKNOWN_COMMAND            0x01
  146. #define HCI_NO_CONNECTION            0x02
  147. #define HCI_HARDWARE_FAILURE            0x03
  148. #define HCI_PAGE_TIMEOUT            0x04
  149. #define HCI_AUTHENTICATION_FAILURE        0x05
  150. #define HCI_PIN_OR_KEY_MISSING            0x06
  151. #define HCI_MEMORY_FULL                0x07
  152. #define HCI_CONNECTION_TIMEOUT            0x08
  153. #define HCI_MAX_NUMBER_OF_CONNECTIONS        0x09
  154. #define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS    0x0a
  155. #define HCI_ACL_CONNECTION_EXISTS        0x0b
  156. #define HCI_COMMAND_DISALLOWED            0x0c
  157. #define HCI_REJECTED_LIMITED_RESOURCES        0x0d
  158. #define HCI_REJECTED_SECURITY            0x0e
  159. #define HCI_REJECTED_PERSONAL            0x0f
  160. #define HCI_HOST_TIMEOUT            0x10
  161. #define HCI_UNSUPPORTED_FEATURE            0x11
  162. #define HCI_INVALID_PARAMETERS            0x12
  163. #define HCI_OE_USER_ENDED_CONNECTION        0x13
  164. #define HCI_OE_LOW_RESOURCES            0x14
  165. #define HCI_OE_POWER_OFF            0x15
  166. #define HCI_CONNECTION_TERMINATED        0x16
  167. #define HCI_REPEATED_ATTEMPTS            0x17
  168. #define HCI_PAIRING_NOT_ALLOWED            0x18
  169. #define HCI_UNKNOWN_LMP_PDU            0x19
  170. #define HCI_UNSUPPORTED_REMOTE_FEATURE        0x1a
  171. #define HCI_SCO_OFFSET_REJECTED            0x1b
  172. #define HCI_SCO_INTERVAL_REJECTED        0x1c
  173. #define HCI_AIR_MODE_REJECTED            0x1d
  174. #define HCI_INVALID_LMP_PARAMETERS        0x1e
  175. #define HCI_UNSPECIFIED_ERROR            0x1f
  176. #define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE    0x20
  177. #define HCI_ROLE_CHANGE_NOT_ALLOWED        0x21
  178. #define HCI_LMP_RESPONSE_TIMEOUT        0x22
  179. #define HCI_LMP_ERROR_TRANSACTION_COLLISION    0x23
  180. #define HCI_LMP_PDU_NOT_ALLOWED            0x24
  181. #define HCI_ENCRYPTION_MODE_NOT_ACCEPTED    0x25
  182. #define HCI_UNIT_LINK_KEY_USED            0x26
  183. #define HCI_QOS_NOT_SUPPORTED            0x27
  184. #define HCI_INSTANT_PASSED            0x28
  185. #define HCI_PAIRING_NOT_SUPPORTED        0x29
  186. #define HCI_TRANSACTION_COLLISION        0x2a
  187. #define HCI_QOS_UNACCEPTABLE_PARAMETER        0x2c
  188. #define HCI_QOS_REJECTED            0x2d
  189. #define HCI_CLASSIFICATION_NOT_SUPPORTED    0x2e
  190. #define HCI_INSUFFICIENT_SECURITY        0x2f
  191. #define HCI_PARAMETER_OUT_OF_RANGE        0x30
  192. #define HCI_ROLE_SWITCH_PENDING            0x32
  193. #define HCI_SLOT_VIOLATION            0x34
  194. #define HCI_ROLE_SWITCH_FAILED            0x35
  195.  
  196. /* ACL flags */
  197. #define ACL_CONT        0x01
  198. #define ACL_START        0x02
  199. #define ACL_ACTIVE_BCAST    0x04
  200. #define ACL_PICO_BCAST        0x08
  201.  
  202. /* Baseband links */
  203. #define SCO_LINK    0x00
  204. #define ACL_LINK    0x01
  205.  
  206. /* LMP features */
  207. #define LMP_3SLOT    0x01
  208. #define LMP_5SLOT    0x02
  209. #define LMP_ENCRYPT    0x04
  210. #define LMP_SOFFSET    0x08
  211. #define LMP_TACCURACY    0x10
  212. #define LMP_RSWITCH    0x20
  213. #define LMP_HOLD    0x40
  214. #define LMP_SNIFF    0x80
  215.  
  216. #define LMP_PARK    0x01
  217. #define LMP_RSSI    0x02
  218. #define LMP_QUALITY    0x04
  219. #define LMP_SCO        0x08
  220. #define LMP_HV2        0x10
  221. #define LMP_HV3        0x20
  222. #define LMP_ULAW    0x40
  223. #define LMP_ALAW    0x80
  224.  
  225. #define LMP_CVSD    0x01
  226. #define LMP_PSCHEME    0x02
  227. #define LMP_PCONTROL    0x04
  228. #define LMP_TRSP_SCO    0x08
  229. #define LMP_BCAST_ENC    0x80
  230.  
  231. #define LMP_EDR_ACL_2M    0x02
  232. #define LMP_EDR_ACL_3M    0x04
  233. #define LMP_ENH_ISCAN    0x08
  234. #define LMP_ILACE_ISCAN    0x10
  235. #define LMP_ILACE_PSCAN    0x20
  236. #define LMP_RSSI_INQ    0x40
  237. #define LMP_ESCO    0x80
  238.  
  239. #define LMP_EV4        0x01
  240. #define LMP_EV5        0x02
  241. #define LMP_AFH_CAP_SLV    0x08
  242. #define LMP_AFH_CLS_SLV    0x10
  243. #define LMP_EDR_3SLOT    0x80
  244.  
  245. #define LMP_EDR_5SLOT    0x01
  246. #define LMP_SNIFF_SUBR    0x02
  247. #define LMP_AFH_CAP_MST    0x08
  248. #define LMP_AFH_CLS_MST    0x10
  249. #define LMP_EDR_ESCO_2M    0x20
  250. #define LMP_EDR_ESCO_3M    0x40
  251. #define LMP_EDR_3S_ESCO    0x80
  252.  
  253. #define LMP_EXT_INQ    0x01
  254.  
  255. #define LMP_EXT_FEAT    0x80
  256.  
  257. /* Link policies */
  258. #define HCI_LP_RSWITCH    0x0001
  259. #define HCI_LP_HOLD    0x0002
  260. #define HCI_LP_SNIFF    0x0004
  261. #define HCI_LP_PARK    0x0008
  262.  
  263. /* Link mode */
  264. #define HCI_LM_ACCEPT    0x8000
  265. #define HCI_LM_MASTER    0x0001
  266. #define HCI_LM_AUTH    0x0002
  267. #define HCI_LM_ENCRYPT    0x0004
  268. #define HCI_LM_TRUSTED    0x0008
  269. #define HCI_LM_RELIABLE    0x0010
  270. #define HCI_LM_SECURE    0x0020
  271.  
  272. /* -----  HCI Commands ----- */
  273.  
  274. /* Link Control */
  275. #define OGF_LINK_CTL        0x01
  276.  
  277. #define OCF_INQUIRY            0x0001
  278. typedef struct {
  279.     uint8_t        lap[3];
  280.     uint8_t        length;        /* 1.28s units */
  281.     uint8_t        num_rsp;
  282. } __attribute__ ((packed)) inquiry_cp;
  283. #define INQUIRY_CP_SIZE 5
  284.  
  285. typedef struct {
  286.     uint8_t        status;
  287.     bdaddr_t    bdaddr;
  288. } __attribute__ ((packed)) status_bdaddr_rp;
  289. #define STATUS_BDADDR_RP_SIZE 7
  290.  
  291. #define OCF_INQUIRY_CANCEL        0x0002
  292.  
  293. #define OCF_PERIODIC_INQUIRY        0x0003
  294. typedef struct {
  295.     uint16_t    max_period;    /* 1.28s units */
  296.     uint16_t    min_period;    /* 1.28s units */
  297.     uint8_t        lap[3];
  298.     uint8_t        length;        /* 1.28s units */
  299.     uint8_t        num_rsp;
  300. } __attribute__ ((packed)) periodic_inquiry_cp;
  301. #define PERIODIC_INQUIRY_CP_SIZE 9
  302.  
  303. #define OCF_EXIT_PERIODIC_INQUIRY    0x0004
  304.  
  305. #define OCF_CREATE_CONN            0x0005
  306. typedef struct {
  307.     bdaddr_t    bdaddr;
  308.     uint16_t    pkt_type;
  309.     uint8_t        pscan_rep_mode;
  310.     uint8_t        pscan_mode;
  311.     uint16_t    clock_offset;
  312.     uint8_t        role_switch;
  313. } __attribute__ ((packed)) create_conn_cp;
  314. #define CREATE_CONN_CP_SIZE 13
  315.  
  316. #define OCF_DISCONNECT            0x0006
  317. typedef struct {
  318.     uint16_t    handle;
  319.     uint8_t        reason;
  320. } __attribute__ ((packed)) disconnect_cp;
  321. #define DISCONNECT_CP_SIZE 3
  322.  
  323. #define OCF_ADD_SCO            0x0007
  324. typedef struct {
  325.     uint16_t    handle;
  326.     uint16_t    pkt_type;
  327. } __attribute__ ((packed)) add_sco_cp;
  328. #define ADD_SCO_CP_SIZE 4
  329.  
  330. #define OCF_CREATE_CONN_CANCEL        0x0008
  331. typedef struct {
  332.     bdaddr_t    bdaddr;
  333. } __attribute__ ((packed)) create_conn_cancel_cp;
  334. #define CREATE_CONN_CANCEL_CP_SIZE 6
  335.  
  336. #define OCF_ACCEPT_CONN_REQ        0x0009
  337. typedef struct {
  338.     bdaddr_t    bdaddr;
  339.     uint8_t        role;
  340. } __attribute__ ((packed)) accept_conn_req_cp;
  341. #define ACCEPT_CONN_REQ_CP_SIZE    7
  342.  
  343. #define OCF_REJECT_CONN_REQ        0x000A
  344. typedef struct {
  345.     bdaddr_t    bdaddr;
  346.     uint8_t        reason;
  347. } __attribute__ ((packed)) reject_conn_req_cp;
  348. #define REJECT_CONN_REQ_CP_SIZE    7
  349.  
  350. #define OCF_LINK_KEY_REPLY        0x000B
  351. typedef struct {
  352.     bdaddr_t    bdaddr;
  353.     uint8_t        link_key[16];
  354. } __attribute__ ((packed)) link_key_reply_cp;
  355. #define LINK_KEY_REPLY_CP_SIZE 22
  356.  
  357. #define OCF_LINK_KEY_NEG_REPLY        0x000C
  358.  
  359. #define OCF_PIN_CODE_REPLY        0x000D
  360. typedef struct {
  361.     bdaddr_t    bdaddr;
  362.     uint8_t        pin_len;
  363.     uint8_t        pin_code[16];
  364. } __attribute__ ((packed)) pin_code_reply_cp;
  365. #define PIN_CODE_REPLY_CP_SIZE 23
  366.  
  367. #define OCF_PIN_CODE_NEG_REPLY        0x000E
  368.  
  369. #define OCF_SET_CONN_PTYPE        0x000F
  370. typedef struct {
  371.     uint16_t     handle;
  372.     uint16_t     pkt_type;
  373. } __attribute__ ((packed)) set_conn_ptype_cp;
  374. #define SET_CONN_PTYPE_CP_SIZE 4
  375.  
  376. #define OCF_AUTH_REQUESTED        0x0011
  377. typedef struct {
  378.     uint16_t     handle;
  379. } __attribute__ ((packed)) auth_requested_cp;
  380. #define AUTH_REQUESTED_CP_SIZE 2
  381.  
  382. #define OCF_SET_CONN_ENCRYPT        0x0013
  383. typedef struct {
  384.     uint16_t    handle;
  385.     uint8_t        encrypt;
  386. } __attribute__ ((packed)) set_conn_encrypt_cp;
  387. #define SET_CONN_ENCRYPT_CP_SIZE 3
  388.  
  389. #define OCF_CHANGE_CONN_LINK_KEY    0x0015
  390. typedef struct {
  391.     uint16_t    handle;
  392. } __attribute__ ((packed)) change_conn_link_key_cp;
  393. #define CHANGE_CONN_LINK_KEY_CP_SIZE 2
  394.  
  395. #define OCF_MASTER_LINK_KEY        0x0017
  396. typedef struct {
  397.     uint8_t        key_flag;
  398. } __attribute__ ((packed)) master_link_key_cp;
  399. #define MASTER_LINK_KEY_CP_SIZE 1
  400.  
  401. #define OCF_REMOTE_NAME_REQ        0x0019
  402. typedef struct {
  403.     bdaddr_t    bdaddr;
  404.     uint8_t        pscan_rep_mode;
  405.     uint8_t        pscan_mode;
  406.     uint16_t    clock_offset;
  407. } __attribute__ ((packed)) remote_name_req_cp;
  408. #define REMOTE_NAME_REQ_CP_SIZE 10
  409.  
  410. #define OCF_REMOTE_NAME_REQ_CANCEL    0x001A
  411. typedef struct {
  412.     bdaddr_t    bdaddr;
  413. } __attribute__ ((packed)) remote_name_req_cancel_cp;
  414. #define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6
  415.  
  416. #define OCF_READ_REMOTE_FEATURES    0x001B
  417. typedef struct {
  418.     uint16_t    handle;
  419. } __attribute__ ((packed)) read_remote_features_cp;
  420. #define READ_REMOTE_FEATURES_CP_SIZE 2
  421.  
  422. #define OCF_READ_REMOTE_EXT_FEATURES    0x001C
  423. typedef struct {
  424.     uint16_t    handle;
  425.     uint8_t        page_num;
  426. } __attribute__ ((packed)) read_remote_ext_features_cp;
  427. #define READ_REMOTE_EXT_FEATURES_CP_SIZE 3
  428.  
  429. #define OCF_READ_REMOTE_VERSION        0x001D
  430. typedef struct {
  431.     uint16_t    handle;
  432. } __attribute__ ((packed)) read_remote_version_cp;
  433. #define READ_REMOTE_VERSION_CP_SIZE 2
  434.  
  435. #define OCF_READ_CLOCK_OFFSET        0x001F
  436. typedef struct {
  437.     uint16_t    handle;
  438. } __attribute__ ((packed)) read_clock_offset_cp;
  439. #define READ_CLOCK_OFFSET_CP_SIZE 2
  440.  
  441. #define OCF_READ_LMP_HANDLE        0x0020
  442.  
  443. #define OCF_SETUP_SYNC_CONN        0x0028
  444. typedef struct {
  445.     uint16_t    handle;
  446.     uint32_t    tx_bandwith;
  447.     uint32_t    rx_bandwith;
  448.     uint16_t    max_latency;
  449.     uint16_t    voice_setting;
  450.     uint8_t        retrans_effort;
  451.     uint16_t    pkt_type;
  452. } __attribute__ ((packed)) setup_sync_conn_cp;
  453. #define SETUP_SYNC_CONN_CP_SIZE 17
  454.  
  455. #define OCF_ACCEPT_SYNC_CONN_REQ    0x0029
  456. typedef struct {
  457.     bdaddr_t    bdaddr;
  458.     uint32_t    tx_bandwith;
  459.     uint32_t    rx_bandwith;
  460.     uint16_t    max_latency;
  461.     uint16_t    voice_setting;
  462.     uint8_t        retrans_effort;
  463.     uint16_t    pkt_type;
  464. } __attribute__ ((packed)) accept_sync_conn_req_cp;
  465. #define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21
  466.  
  467. #define OCF_REJECT_SYNC_CONN_REQ    0x002A
  468. typedef struct {
  469.     bdaddr_t    bdaddr;
  470.     uint8_t        reason;
  471. } __attribute__ ((packed)) reject_sync_conn_req_cp;
  472. #define REJECT_SYNC_CONN_REQ_CP_SIZE 7
  473.  
  474. /* Link Policy */
  475. #define OGF_LINK_POLICY        0x02
  476.  
  477. #define OCF_HOLD_MODE            0x0001
  478. typedef struct {
  479.     uint16_t    handle;
  480.     uint16_t    max_interval;
  481.     uint16_t    min_interval;
  482. } __attribute__ ((packed)) hold_mode_cp;
  483. #define HOLD_MODE_CP_SIZE 6
  484.  
  485. #define OCF_SNIFF_MODE            0x0003
  486. typedef struct {
  487.     uint16_t    handle;
  488.     uint16_t    max_interval;
  489.     uint16_t    min_interval;
  490.     uint16_t    attempt;
  491.     uint16_t    timeout;
  492. } __attribute__ ((packed)) sniff_mode_cp;
  493. #define SNIFF_MODE_CP_SIZE 10
  494.  
  495. #define OCF_EXIT_SNIFF_MODE        0x0004
  496. typedef struct {
  497.     uint16_t    handle;
  498. } __attribute__ ((packed)) exit_sniff_mode_cp;
  499. #define EXIT_SNIFF_MODE_CP_SIZE 2
  500.  
  501. #define OCF_PARK_MODE            0x0005
  502. typedef struct {
  503.     uint16_t    handle;
  504.     uint16_t    max_interval;
  505.     uint16_t    min_interval;
  506. } __attribute__ ((packed)) park_mode_cp;
  507. #define PARK_MODE_CP_SIZE 6
  508.  
  509. #define OCF_EXIT_PARK_MODE        0x0006
  510. typedef struct {
  511.     uint16_t    handle;
  512. } __attribute__ ((packed)) exit_park_mode_cp;
  513. #define EXIT_PARK_MODE_CP_SIZE 2
  514.  
  515. #define OCF_QOS_SETUP            0x0007
  516. typedef struct {
  517.     uint8_t        service_type;        /* 1 = best effort */
  518.     uint32_t    token_rate;        /* Byte per seconds */
  519.     uint32_t    peak_bandwidth;        /* Byte per seconds */
  520.     uint32_t    latency;        /* Microseconds */
  521.     uint32_t    delay_variation;    /* Microseconds */
  522. } __attribute__ ((packed)) hci_qos;
  523. #define HCI_QOS_CP_SIZE 17
  524. typedef struct {
  525.     uint16_t     handle;
  526.     uint8_t     flags;            /* Reserved */
  527.     hci_qos     qos;
  528. } __attribute__ ((packed)) qos_setup_cp;
  529. #define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)
  530.  
  531. #define OCF_ROLE_DISCOVERY        0x0009
  532. typedef struct {
  533.     uint16_t    handle;
  534. } __attribute__ ((packed)) role_discovery_cp;
  535. #define ROLE_DISCOVERY_CP_SIZE 2
  536. typedef struct {
  537.     uint8_t        status;
  538.     uint16_t    handle;
  539.     uint8_t        role;
  540. } __attribute__ ((packed)) role_discovery_rp;
  541. #define ROLE_DISCOVERY_RP_SIZE 4
  542.  
  543. #define OCF_SWITCH_ROLE            0x000B
  544. typedef struct {
  545.     bdaddr_t    bdaddr;
  546.     uint8_t        role;
  547. } __attribute__ ((packed)) switch_role_cp;
  548. #define SWITCH_ROLE_CP_SIZE 7
  549.  
  550. #define OCF_READ_LINK_POLICY        0x000C
  551. typedef struct {
  552.     uint16_t    handle;
  553. } __attribute__ ((packed)) read_link_policy_cp;
  554. #define READ_LINK_POLICY_CP_SIZE 2
  555. typedef struct {
  556.     uint8_t     status;
  557.     uint16_t    handle;
  558.     uint16_t    policy;
  559. } __attribute__ ((packed)) read_link_policy_rp;
  560. #define READ_LINK_POLICY_RP_SIZE 5
  561.  
  562. #define OCF_WRITE_LINK_POLICY        0x000D
  563. typedef struct {
  564.     uint16_t    handle;
  565.     uint16_t    policy;
  566. } __attribute__ ((packed)) write_link_policy_cp;
  567. #define WRITE_LINK_POLICY_CP_SIZE 4
  568. typedef struct {
  569.     uint8_t     status;
  570.     uint16_t    handle;
  571. } __attribute__ ((packed)) write_link_policy_rp;
  572. #define WRITE_LINK_POLICY_RP_SIZE 3
  573.  
  574. #define OCF_READ_DEFAULT_LINK_POLICY    0x000E
  575.  
  576. #define OCF_WRITE_DEFAULT_LINK_POLICY    0x000F
  577.  
  578. #define OCF_SNIFF_SUBRATE        0x0011
  579. typedef struct {
  580.     uint16_t    handle;
  581.     uint16_t    max_remote_latency;
  582.     uint16_t    max_local_latency;
  583.     uint16_t    min_remote_timeout;
  584.     uint16_t    min_local_timeout;
  585. } __attribute__ ((packed)) sniff_subrate_cp;
  586. #define SNIFF_SUBRATE_CP_SIZE 10
  587.  
  588. /* Host Controller and Baseband */
  589. #define OGF_HOST_CTL        0x03
  590.  
  591. #define OCF_SET_EVENT_MASK        0x0001
  592. typedef struct {
  593.     uint8_t        mask[8];
  594. } __attribute__ ((packed)) set_event_mask_cp;
  595. #define SET_EVENT_MASK_CP_SIZE 8
  596.  
  597. #define OCF_RESET            0x0003
  598.  
  599. #define OCF_SET_EVENT_FLT        0x0005
  600. typedef struct {
  601.     uint8_t        flt_type;
  602.     uint8_t        cond_type;
  603.     uint8_t        condition[0];
  604. } __attribute__ ((packed)) set_event_flt_cp;
  605. #define SET_EVENT_FLT_CP_SIZE 2
  606.  
  607. /* Filter types */
  608. #define FLT_CLEAR_ALL            0x00
  609. #define FLT_INQ_RESULT            0x01
  610. #define FLT_CONN_SETUP            0x02
  611. /* INQ_RESULT Condition types */
  612. #define INQ_RESULT_RETURN_ALL        0x00
  613. #define INQ_RESULT_RETURN_CLASS        0x01
  614. #define INQ_RESULT_RETURN_BDADDR    0x02
  615. /* CONN_SETUP Condition types */
  616. #define CONN_SETUP_ALLOW_ALL        0x00
  617. #define CONN_SETUP_ALLOW_CLASS        0x01
  618. #define CONN_SETUP_ALLOW_BDADDR        0x02
  619. /* CONN_SETUP Conditions */
  620. #define CONN_SETUP_AUTO_OFF        0x01
  621. #define CONN_SETUP_AUTO_ON        0x02
  622.  
  623. #define OCF_FLUSH            0x0008
  624.  
  625. #define OCF_READ_PIN_TYPE        0x0009
  626. typedef struct {
  627.     uint8_t        status;
  628.     uint8_t        pin_type;
  629. } __attribute__ ((packed)) read_pin_type_rp;
  630. #define READ_PIN_TYPE_RP_SIZE 2
  631.  
  632. #define OCF_WRITE_PIN_TYPE        0x000A
  633. typedef struct {
  634.     uint8_t        pin_type;
  635. } __attribute__ ((packed)) write_pin_type_cp;
  636. #define WRITE_PIN_TYPE_CP_SIZE 1
  637.  
  638. #define OCF_CREATE_NEW_UNIT_KEY        0x000B
  639.  
  640. #define OCF_READ_STORED_LINK_KEY    0x000D
  641. typedef struct {
  642.     bdaddr_t    bdaddr;
  643.     uint8_t        read_all;
  644. } __attribute__ ((packed)) read_stored_link_key_cp;
  645. #define READ_STORED_LINK_KEY_CP_SIZE 7
  646. typedef struct {
  647.     uint8_t        status;
  648.     uint16_t    max_keys;
  649.     uint16_t    num_keys;
  650. } __attribute__ ((packed)) read_stored_link_key_rp;
  651. #define READ_STORED_LINK_KEY_RP_SIZE 5
  652.  
  653. #define OCF_WRITE_STORED_LINK_KEY    0x0011
  654. typedef struct {
  655.     uint8_t        num_keys;
  656.     /* variable length part */
  657. } __attribute__ ((packed)) write_stored_link_key_cp;
  658. #define WRITE_STORED_LINK_KEY_CP_SIZE 1
  659. typedef struct {
  660.     uint8_t        status;
  661.     uint8_t        num_keys;
  662. } __attribute__ ((packed)) write_stored_link_key_rp;
  663. #define READ_WRITE_LINK_KEY_RP_SIZE 2
  664.  
  665. #define OCF_DELETE_STORED_LINK_KEY    0x0012
  666. typedef struct {
  667.     bdaddr_t    bdaddr;
  668.     uint8_t        delete_all;
  669. } __attribute__ ((packed)) delete_stored_link_key_cp;
  670. #define DELETE_STORED_LINK_KEY_CP_SIZE 7
  671. typedef struct {
  672.     uint8_t        status;
  673.     uint16_t    num_keys;
  674. } __attribute__ ((packed)) delete_stored_link_key_rp;
  675. #define DELETE_STORED_LINK_KEY_RP_SIZE 3
  676.  
  677. #define OCF_CHANGE_LOCAL_NAME        0x0013
  678. typedef struct {
  679.     uint8_t        name[248];
  680. } __attribute__ ((packed)) change_local_name_cp;
  681. #define CHANGE_LOCAL_NAME_CP_SIZE 248 
  682.  
  683. #define OCF_READ_LOCAL_NAME        0x0014
  684. typedef struct {
  685.     uint8_t        status;
  686.     uint8_t        name[248];
  687. } __attribute__ ((packed)) read_local_name_rp;
  688. #define READ_LOCAL_NAME_RP_SIZE 249 
  689.  
  690. #define OCF_READ_CONN_ACCEPT_TIMEOUT    0x0015
  691. typedef struct {
  692.     uint8_t        status;
  693.     uint16_t    timeout;
  694. } __attribute__ ((packed)) read_conn_accept_timeout_rp;
  695. #define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3
  696.  
  697. #define OCF_WRITE_CONN_ACCEPT_TIMEOUT    0x0016
  698. typedef struct {
  699.     uint16_t    timeout;
  700. } __attribute__ ((packed)) write_conn_accept_timeout_cp;
  701. #define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2
  702.  
  703. #define OCF_READ_PAGE_TIMEOUT        0x0017
  704. typedef struct {
  705.     uint8_t        status;
  706.     uint16_t    timeout;
  707. } __attribute__ ((packed)) read_page_timeout_rp;
  708. #define READ_PAGE_TIMEOUT_RP_SIZE 3
  709.  
  710. #define OCF_WRITE_PAGE_TIMEOUT        0x0018
  711. typedef struct {
  712.     uint16_t    timeout;
  713. } __attribute__ ((packed)) write_page_timeout_cp;
  714. #define WRITE_PAGE_TIMEOUT_CP_SIZE 2
  715.  
  716. #define OCF_READ_SCAN_ENABLE        0x0019
  717. typedef struct {
  718.     uint8_t        status;
  719.     uint8_t        enable;
  720. } __attribute__ ((packed)) read_scan_enable_rp;
  721. #define READ_SCAN_ENABLE_RP_SIZE 2
  722.  
  723. #define OCF_WRITE_SCAN_ENABLE        0x001A
  724.     #define SCAN_DISABLED        0x00
  725.     #define SCAN_INQUIRY        0x01
  726.     #define SCAN_PAGE        0x02
  727.  
  728. #define OCF_READ_PAGE_ACTIVITY        0x001B
  729. typedef struct {
  730.     uint8_t        status;
  731.     uint16_t    interval;
  732.     uint16_t    window;
  733. } __attribute__ ((packed)) read_page_activity_rp;
  734. #define READ_PAGE_ACTIVITY_RP_SIZE 5
  735.  
  736. #define OCF_WRITE_PAGE_ACTIVITY        0x001C
  737. typedef struct {
  738.     uint16_t    interval;
  739.     uint16_t    window;
  740. } __attribute__ ((packed)) write_page_activity_cp;
  741. #define WRITE_PAGE_ACTIVITY_CP_SIZE 4
  742.  
  743. #define OCF_READ_INQ_ACTIVITY        0x001D
  744. typedef struct {
  745.     uint8_t        status;
  746.     uint16_t    interval;
  747.     uint16_t    window;
  748. } __attribute__ ((packed)) read_inq_activity_rp;
  749. #define READ_INQ_ACTIVITY_RP_SIZE 5
  750.  
  751. #define OCF_WRITE_INQ_ACTIVITY        0x001E
  752. typedef struct {
  753.     uint16_t    interval;
  754.     uint16_t    window;
  755. } __attribute__ ((packed)) write_inq_activity_cp;
  756. #define WRITE_INQ_ACTIVITY_CP_SIZE 4
  757.  
  758. #define OCF_READ_AUTH_ENABLE        0x001F
  759.  
  760. #define OCF_WRITE_AUTH_ENABLE        0x0020
  761.     #define AUTH_DISABLED        0x00
  762.     #define AUTH_ENABLED        0x01
  763.  
  764. #define OCF_READ_ENCRYPT_MODE        0x0021
  765.  
  766. #define OCF_WRITE_ENCRYPT_MODE        0x0022
  767.     #define ENCRYPT_DISABLED    0x00
  768.     #define ENCRYPT_P2P        0x01
  769.     #define ENCRYPT_BOTH        0x02
  770.  
  771. #define OCF_READ_CLASS_OF_DEV        0x0023
  772. typedef struct {
  773.     uint8_t        status;
  774.     uint8_t        dev_class[3];
  775. } __attribute__ ((packed)) read_class_of_dev_rp;
  776. #define READ_CLASS_OF_DEV_RP_SIZE 4 
  777.  
  778. #define OCF_WRITE_CLASS_OF_DEV        0x0024
  779. typedef struct {
  780.     uint8_t        dev_class[3];
  781. } __attribute__ ((packed)) write_class_of_dev_cp;
  782. #define WRITE_CLASS_OF_DEV_CP_SIZE 3
  783.  
  784. #define OCF_READ_VOICE_SETTING        0x0025
  785. typedef struct {
  786.     uint8_t        status;
  787.     uint16_t    voice_setting;
  788. } __attribute__ ((packed)) read_voice_setting_rp;
  789. #define READ_VOICE_SETTING_RP_SIZE 3
  790.  
  791. #define OCF_WRITE_VOICE_SETTING        0x0026
  792. typedef struct {
  793.     uint16_t    voice_setting;
  794. } __attribute__ ((packed)) write_voice_setting_cp;
  795. #define WRITE_VOICE_SETTING_CP_SIZE 2
  796.  
  797. #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT    0x0027
  798.  
  799. #define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT    0x0028
  800.  
  801. #define OCF_READ_NUM_BROADCAST_RETRANS    0x0029
  802.  
  803. #define OCF_WRITE_NUM_BROADCAST_RETRANS    0x002A
  804.  
  805. #define OCF_READ_HOLD_MODE_ACTIVITY    0x002B
  806.  
  807. #define OCF_WRITE_HOLD_MODE_ACTIVITY    0x002C
  808.  
  809. #define OCF_READ_TRANSMIT_POWER_LEVEL    0x002D
  810. typedef struct {
  811.     uint16_t    handle;
  812.     uint8_t        type;
  813. } __attribute__ ((packed)) read_transmit_power_level_cp;
  814. #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
  815. typedef struct {
  816.     uint8_t        status;
  817.     uint16_t    handle;
  818.     int8_t        level;
  819. } __attribute__ ((packed)) read_transmit_power_level_rp;
  820. #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
  821.  
  822. #define OCF_HOST_BUFFER_SIZE        0x0033
  823. typedef struct {
  824.     uint16_t    acl_mtu;
  825.     uint8_t        sco_mtu;
  826.     uint16_t    acl_max_pkt;
  827.     uint16_t    sco_max_pkt;
  828. } __attribute__ ((packed)) host_buffer_size_cp;
  829. #define HOST_BUFFER_SIZE_CP_SIZE 7
  830.  
  831. #define OCF_READ_LINK_SUPERVISION_TIMEOUT    0x0036
  832. typedef struct {
  833.     uint8_t        status;
  834.     uint16_t    handle;
  835.     uint16_t    link_sup_to;
  836. } __attribute__ ((packed)) read_link_supervision_timeout_rp;
  837. #define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5
  838.  
  839. #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT    0x0037
  840. typedef struct {
  841.     uint16_t    handle;
  842.     uint16_t    link_sup_to;
  843. } __attribute__ ((packed)) write_link_supervision_timeout_cp;
  844. #define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4
  845. typedef struct {
  846.     uint8_t        status;
  847.     uint16_t    handle;
  848. } __attribute__ ((packed)) write_link_supervision_timeout_rp;
  849. #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3
  850.  
  851. #define OCF_READ_NUM_SUPPORTED_IAC    0x0038
  852.  
  853. #define MAX_IAC_LAP 0x40
  854. #define OCF_READ_CURRENT_IAC_LAP    0x0039
  855. typedef struct {
  856.     uint8_t        status;
  857.     uint8_t        num_current_iac;
  858.     uint8_t        lap[MAX_IAC_LAP][3];
  859. } __attribute__ ((packed)) read_current_iac_lap_rp;
  860. #define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP
  861.  
  862. #define OCF_WRITE_CURRENT_IAC_LAP    0x003A
  863. typedef struct {
  864.     uint8_t        num_current_iac;
  865.     uint8_t        lap[MAX_IAC_LAP][3];
  866. } __attribute__ ((packed)) write_current_iac_lap_cp;
  867. #define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP
  868.  
  869. #define OCF_READ_PAGE_SCAN_PERIOD_MODE    0x003B
  870.  
  871. #define OCF_WRITE_PAGE_SCAN_PERIOD_MODE    0x003C
  872.  
  873. #define OCF_READ_PAGE_SCAN_MODE        0x003D
  874.  
  875. #define OCF_WRITE_PAGE_SCAN_MODE    0x003E
  876.  
  877. #define OCF_SET_AFH_CLASSIFICATION    0x003F
  878. typedef struct {
  879.     uint8_t        map[10];
  880. } __attribute__ ((packed)) set_afh_classification_cp;
  881. #define SET_AFH_CLASSIFICATION_CP_SIZE 10
  882. typedef struct {
  883.     uint8_t        status;
  884. } __attribute__ ((packed)) set_afh_classification_rp;
  885. #define SET_AFH_CLASSIFICATION_RP_SIZE 1
  886.  
  887. #define OCF_READ_INQUIRY_SCAN_TYPE    0x0042
  888. typedef struct {
  889.     uint8_t        status;
  890.     uint8_t        type;
  891. } __attribute__ ((packed)) read_inquiry_scan_type_rp;
  892. #define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2
  893.  
  894. #define OCF_WRITE_INQUIRY_SCAN_TYPE    0x0043
  895. typedef struct {
  896.     uint8_t        type;
  897. } __attribute__ ((packed)) write_inquiry_scan_type_cp;
  898. #define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1
  899. typedef struct {
  900.     uint8_t        status;
  901. } __attribute__ ((packed)) write_inquiry_scan_type_rp;
  902. #define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1
  903.  
  904. #define OCF_READ_INQUIRY_MODE        0x0044
  905. typedef struct {
  906.     uint8_t        status;
  907.     uint8_t        mode;
  908. } __attribute__ ((packed)) read_inquiry_mode_rp;
  909. #define READ_INQUIRY_MODE_RP_SIZE 2
  910.  
  911. #define OCF_WRITE_INQUIRY_MODE        0x0045
  912. typedef struct {
  913.     uint8_t        mode;
  914. } __attribute__ ((packed)) write_inquiry_mode_cp;
  915. #define WRITE_INQUIRY_MODE_CP_SIZE 1
  916. typedef struct {
  917.     uint8_t        status;
  918. } __attribute__ ((packed)) write_inquiry_mode_rp;
  919. #define WRITE_INQUIRY_MODE_RP_SIZE 1
  920.  
  921. #define OCF_READ_PAGE_SCAN_TYPE        0x0046
  922.  
  923. #define OCF_WRITE_PAGE_SCAN_TYPE    0x0047
  924.  
  925. #define OCF_READ_AFH_MODE        0x0048
  926. typedef struct {
  927.     uint8_t        status;
  928.     uint8_t        mode;
  929. } __attribute__ ((packed)) read_afh_mode_rp;
  930. #define READ_AFH_MODE_RP_SIZE 2
  931.  
  932. #define OCF_WRITE_AFH_MODE        0x0049
  933. typedef struct {
  934.     uint8_t        mode;
  935. } __attribute__ ((packed)) write_afh_mode_cp;
  936. #define WRITE_AFH_MODE_CP_SIZE 1
  937. typedef struct {
  938.     uint8_t        status;
  939. } __attribute__ ((packed)) write_afh_mode_rp;
  940. #define WRITE_AFH_MODE_RP_SIZE 1
  941.  
  942. #define OCF_READ_EXT_INQUIRY_RESPONSE    0x0051
  943. typedef struct {
  944.     uint8_t        status;
  945.     uint8_t        fec;
  946.     uint8_t        data[240];
  947. } __attribute__ ((packed)) read_ext_inquiry_response_rp;
  948. #define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242
  949.  
  950. #define OCF_WRITE_EXT_INQUIRY_RESPONSE    0x0052
  951. typedef struct {
  952.     uint8_t        fec;
  953.     uint8_t        data[240];
  954. } __attribute__ ((packed)) write_ext_inquiry_response_cp;
  955. #define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241
  956. typedef struct {
  957.     uint8_t        status;
  958. } __attribute__ ((packed)) write_ext_inquiry_response_rp;
  959. #define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1
  960.  
  961. /* Informational Parameters */
  962. #define OGF_INFO_PARAM        0x04
  963.  
  964. #define OCF_READ_LOCAL_VERSION        0x0001
  965. typedef struct {
  966.     uint8_t        status;
  967.     uint8_t        hci_ver;
  968.     uint16_t    hci_rev;
  969.     uint8_t        lmp_ver;
  970.     uint16_t    manufacturer;
  971.     uint16_t    lmp_subver;
  972. } __attribute__ ((packed)) read_local_version_rp;
  973. #define READ_LOCAL_VERSION_RP_SIZE 9
  974.  
  975. #define OCF_READ_LOCAL_COMMANDS        0x0002
  976. typedef struct {
  977.     uint8_t        status;
  978.     uint8_t        commands[64];
  979. } __attribute__ ((packed)) read_local_commands_rp;
  980. #define READ_LOCAL_COMMANDS_RP_SIZE 65
  981.  
  982. #define OCF_READ_LOCAL_FEATURES        0x0003
  983. typedef struct {
  984.     uint8_t        status;
  985.     uint8_t        features[8];
  986. } __attribute__ ((packed)) read_local_features_rp;
  987. #define READ_LOCAL_FEATURES_RP_SIZE 9
  988.  
  989. #define OCF_READ_LOCAL_EXT_FEATURES    0x0004
  990. typedef struct {
  991.     uint8_t        page_num;
  992. } __attribute__ ((packed)) read_local_ext_features_cp;
  993. #define READ_LOCAL_EXT_FEATURES_CP_SIZE 1
  994. typedef struct {
  995.     uint8_t        status;
  996.     uint8_t        page_num;
  997.     uint8_t        max_page_num;
  998.     uint8_t        features[8];
  999. } __attribute__ ((packed)) read_local_ext_features_rp;
  1000. #define READ_LOCAL_EXT_FEATURES_RP_SIZE 11
  1001.  
  1002. #define OCF_READ_BUFFER_SIZE        0x0005
  1003. typedef struct {
  1004.     uint8_t        status;
  1005.     uint16_t    acl_mtu;
  1006.     uint8_t        sco_mtu;
  1007.     uint16_t    acl_max_pkt;
  1008.     uint16_t    sco_max_pkt;
  1009. } __attribute__ ((packed)) read_buffer_size_rp;
  1010. #define READ_BUFFER_SIZE_RP_SIZE 8
  1011.  
  1012. #define OCF_READ_COUNTRY_CODE        0x0007
  1013.  
  1014. #define OCF_READ_BD_ADDR        0x0009
  1015. typedef struct {
  1016.     uint8_t        status;
  1017.     bdaddr_t    bdaddr;
  1018. } __attribute__ ((packed)) read_bd_addr_rp;
  1019. #define READ_BD_ADDR_RP_SIZE 7
  1020.  
  1021. /* Status params */
  1022. #define OGF_STATUS_PARAM    0x05
  1023.  
  1024. #define OCF_READ_FAILED_CONTACT_COUNTER        0x0001
  1025. typedef struct {
  1026.     uint8_t        status;
  1027.     uint16_t    handle;
  1028.     uint8_t        counter;
  1029. } __attribute__ ((packed)) read_failed_contact_counter_rp;
  1030. #define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4
  1031.  
  1032. #define OCF_RESET_FAILED_CONTACT_COUNTER    0x0002
  1033. typedef struct {
  1034.     uint8_t        status;
  1035.     uint16_t    handle;
  1036. } __attribute__ ((packed)) reset_failed_contact_counter_rp;
  1037. #define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4
  1038.  
  1039. #define OCF_READ_LINK_QUALITY        0x0003
  1040. typedef struct {
  1041.     uint8_t        status;
  1042.     uint16_t    handle;
  1043.     uint8_t        link_quality;
  1044. } __attribute__ ((packed)) read_link_quality_rp;
  1045. #define READ_LINK_QUALITY_RP_SIZE 4
  1046.  
  1047. #define OCF_READ_RSSI            0x0005
  1048. typedef struct {
  1049.     uint8_t        status;
  1050.     uint16_t    handle;
  1051.     int8_t        rssi;
  1052. } __attribute__ ((packed)) read_rssi_rp;
  1053. #define READ_RSSI_RP_SIZE 4
  1054.  
  1055. #define OCF_READ_AFH_MAP        0x0006
  1056. typedef struct {
  1057.     uint8_t        status;
  1058.     uint16_t    handle;
  1059.     uint8_t        mode;
  1060.     uint8_t        map[10];
  1061. } __attribute__ ((packed)) read_afh_map_rp;
  1062. #define READ_AFH_MAP_RP_SIZE 14
  1063.  
  1064. #define OCF_READ_CLOCK            0x0007
  1065. typedef struct {
  1066.     uint16_t    handle;
  1067.     uint8_t        which_clock;
  1068. } __attribute__ ((packed)) read_clock_cp;
  1069. #define READ_CLOCK_CP_SIZE 3
  1070. typedef struct {
  1071.     uint8_t        status;
  1072.     uint16_t    handle;
  1073.     uint32_t    clock;
  1074.     uint16_t    accuracy;
  1075. } __attribute__ ((packed)) read_clock_rp;
  1076. #define READ_CLOCK_RP_SIZE 9
  1077.  
  1078. /* Testing commands */
  1079. #define OGF_TESTING_CMD        0x3e
  1080.  
  1081. /* Vendor specific commands */
  1082. #define OGF_VENDOR_CMD        0x3f
  1083.  
  1084. /* ---- HCI Events ---- */
  1085.  
  1086. #define EVT_INQUIRY_COMPLETE        0x01
  1087.  
  1088. #define EVT_INQUIRY_RESULT        0x02
  1089. typedef struct {
  1090.     bdaddr_t    bdaddr;
  1091.     uint8_t        pscan_rep_mode;
  1092.     uint8_t        pscan_period_mode;
  1093.     uint8_t        pscan_mode;
  1094.     uint8_t        dev_class[3];
  1095.     uint16_t    clock_offset;
  1096. } __attribute__ ((packed)) inquiry_info;
  1097. #define INQUIRY_INFO_SIZE 14
  1098.  
  1099. #define EVT_CONN_COMPLETE        0x03
  1100. typedef struct {
  1101.     uint8_t        status;
  1102.     uint16_t    handle;
  1103.     bdaddr_t    bdaddr;
  1104.     uint8_t        link_type;
  1105.     uint8_t        encr_mode;
  1106. } __attribute__ ((packed)) evt_conn_complete;
  1107. #define EVT_CONN_COMPLETE_SIZE 13
  1108.  
  1109. #define EVT_CONN_REQUEST        0x04
  1110. typedef struct {
  1111.     bdaddr_t    bdaddr;
  1112.     uint8_t        dev_class[3];
  1113.     uint8_t        link_type;
  1114. } __attribute__ ((packed)) evt_conn_request;
  1115. #define EVT_CONN_REQUEST_SIZE 10
  1116.  
  1117. #define EVT_DISCONN_COMPLETE        0x05
  1118. typedef struct {
  1119.     uint8_t        status;
  1120.     uint16_t    handle;
  1121.     uint8_t        reason;
  1122. } __attribute__ ((packed)) evt_disconn_complete;
  1123. #define EVT_DISCONN_COMPLETE_SIZE 4
  1124.  
  1125. #define EVT_AUTH_COMPLETE        0x06
  1126. typedef struct {
  1127.     uint8_t        status;
  1128.     uint16_t    handle;
  1129. } __attribute__ ((packed)) evt_auth_complete;
  1130. #define EVT_AUTH_COMPLETE_SIZE 3
  1131.  
  1132. #define EVT_REMOTE_NAME_REQ_COMPLETE    0x07
  1133. typedef struct {
  1134.     uint8_t        status;
  1135.     bdaddr_t    bdaddr;
  1136.     uint8_t        name[248];
  1137. } __attribute__ ((packed)) evt_remote_name_req_complete;
  1138. #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
  1139.  
  1140. #define EVT_ENCRYPT_CHANGE        0x08
  1141. typedef struct {
  1142.     uint8_t        status;
  1143.     uint16_t    handle;
  1144.     uint8_t        encrypt;
  1145. } __attribute__ ((packed)) evt_encrypt_change;
  1146. #define EVT_ENCRYPT_CHANGE_SIZE 5
  1147.  
  1148. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE    0x09
  1149. typedef struct {
  1150.     uint8_t        status;
  1151.     uint16_t    handle;
  1152. }  __attribute__ ((packed)) evt_change_conn_link_key_complete;
  1153. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3
  1154.  
  1155. #define EVT_MASTER_LINK_KEY_COMPLETE        0x0A
  1156. typedef struct {
  1157.     uint8_t        status;
  1158.     uint16_t    handle;
  1159.     uint8_t        key_flag;
  1160. } __attribute__ ((packed)) evt_master_link_key_complete;
  1161. #define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4
  1162.  
  1163. #define EVT_READ_REMOTE_FEATURES_COMPLETE    0x0B
  1164. typedef struct {
  1165.     uint8_t        status;
  1166.     uint16_t    handle;
  1167.     uint8_t        features[8];
  1168. } __attribute__ ((packed)) evt_read_remote_features_complete;
  1169. #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
  1170.  
  1171. #define EVT_READ_REMOTE_VERSION_COMPLETE    0x0C
  1172. typedef struct {
  1173.     uint8_t        status;
  1174.     uint16_t    handle;
  1175.     uint8_t        lmp_ver;
  1176.     uint16_t    manufacturer;
  1177.     uint16_t    lmp_subver;
  1178. } __attribute__ ((packed)) evt_read_remote_version_complete;
  1179. #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
  1180.  
  1181. #define EVT_QOS_SETUP_COMPLETE        0x0D
  1182. typedef struct {
  1183.     uint8_t        status;
  1184.     uint16_t    handle;
  1185.     uint8_t        flags;            /* Reserved */
  1186.     hci_qos        qos;
  1187. } __attribute__ ((packed)) evt_qos_setup_complete;
  1188. #define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)
  1189.  
  1190. #define EVT_CMD_COMPLETE         0x0E
  1191. typedef struct {
  1192.     uint8_t        ncmd;
  1193.     uint16_t    opcode;
  1194. } __attribute__ ((packed)) evt_cmd_complete;
  1195. #define EVT_CMD_COMPLETE_SIZE 3
  1196.  
  1197. #define EVT_CMD_STATUS             0x0F
  1198. typedef struct {
  1199.     uint8_t        status;
  1200.     uint8_t        ncmd;
  1201.     uint16_t    opcode;
  1202. } __attribute__ ((packed)) evt_cmd_status;
  1203. #define EVT_CMD_STATUS_SIZE 4
  1204.  
  1205. #define EVT_HARDWARE_ERROR        0x10
  1206. typedef struct {
  1207.     uint8_t        code;
  1208. } __attribute__ ((packed)) evt_hardware_error;
  1209. #define EVT_HARDWARE_ERROR_SIZE 1
  1210.  
  1211. #define EVT_FLUSH_OCCURRED        0x11
  1212. typedef struct {
  1213.     uint16_t    handle;
  1214. } __attribute__ ((packed)) evt_flush_occured;
  1215. #define EVT_FLUSH_OCCURRED_SIZE 2
  1216.  
  1217. #define EVT_ROLE_CHANGE            0x12
  1218. typedef struct {
  1219.     uint8_t        status;
  1220.     bdaddr_t    bdaddr;
  1221.     uint8_t        role;
  1222. } __attribute__ ((packed)) evt_role_change;
  1223. #define EVT_ROLE_CHANGE_SIZE 8
  1224.  
  1225. #define EVT_NUM_COMP_PKTS        0x13
  1226. typedef struct {
  1227.     uint8_t        num_hndl;
  1228.     /* variable length part */
  1229. } __attribute__ ((packed)) evt_num_comp_pkts;
  1230. #define EVT_NUM_COMP_PKTS_SIZE 1
  1231.  
  1232. #define EVT_MODE_CHANGE            0x14
  1233. typedef struct {
  1234.     uint8_t        status;
  1235.     uint16_t    handle;
  1236.     uint8_t        mode;
  1237.     uint16_t    interval;
  1238. } __attribute__ ((packed)) evt_mode_change;
  1239. #define EVT_MODE_CHANGE_SIZE 6
  1240.  
  1241. #define EVT_RETURN_LINK_KEYS        0x15
  1242. typedef struct {
  1243.     uint8_t        num_keys;
  1244.     /* variable length part */
  1245. } __attribute__ ((packed)) evt_return_link_keys;
  1246. #define EVT_RETURN_LINK_KEYS_SIZE 1
  1247.  
  1248. #define EVT_PIN_CODE_REQ        0x16
  1249. typedef struct {
  1250.     bdaddr_t    bdaddr;
  1251. } __attribute__ ((packed)) evt_pin_code_req;
  1252. #define EVT_PIN_CODE_REQ_SIZE 6
  1253.  
  1254. #define EVT_LINK_KEY_REQ        0x17
  1255. typedef struct {
  1256.     bdaddr_t    bdaddr;
  1257. } __attribute__ ((packed)) evt_link_key_req;
  1258. #define EVT_LINK_KEY_REQ_SIZE 6
  1259.  
  1260. #define EVT_LINK_KEY_NOTIFY        0x18
  1261. typedef struct {
  1262.     bdaddr_t    bdaddr;
  1263.     uint8_t        link_key[16];
  1264.     uint8_t        key_type;
  1265. } __attribute__ ((packed)) evt_link_key_notify;
  1266. #define EVT_LINK_KEY_NOTIFY_SIZE 23
  1267.  
  1268. #define EVT_LOOPBACK_COMMAND        0x19
  1269.  
  1270. #define EVT_DATA_BUFFER_OVERFLOW    0x1A
  1271. typedef struct {
  1272.     uint8_t        link_type;
  1273. } __attribute__ ((packed)) evt_data_buffer_overflow;
  1274. #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
  1275.  
  1276. #define EVT_MAX_SLOTS_CHANGE        0x1B
  1277. typedef struct {
  1278.     uint16_t    handle;
  1279.     uint8_t        max_slots;
  1280. } __attribute__ ((packed)) evt_max_slots_change;
  1281. #define EVT_MAX_SLOTS_CHANGE_SIZE 3
  1282.  
  1283. #define EVT_READ_CLOCK_OFFSET_COMPLETE    0x1C
  1284. typedef struct {
  1285.     uint8_t        status;
  1286.     uint16_t    handle;
  1287.     uint16_t    clock_offset;
  1288. } __attribute__ ((packed)) evt_read_clock_offset_complete;
  1289. #define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5
  1290.  
  1291. #define EVT_CONN_PTYPE_CHANGED        0x1D
  1292. typedef struct {
  1293.     uint8_t        status;
  1294.     uint16_t    handle;
  1295.     uint16_t    ptype;
  1296. } __attribute__ ((packed)) evt_conn_ptype_changed;
  1297. #define EVT_CONN_PTYPE_CHANGED_SIZE 5
  1298.  
  1299. #define EVT_QOS_VIOLATION        0x1E
  1300. typedef struct {
  1301.     uint16_t    handle;
  1302. } __attribute__ ((packed)) evt_qos_violation;
  1303. #define EVT_QOS_VIOLATION_SIZE 2
  1304.  
  1305. #define EVT_PSCAN_REP_MODE_CHANGE    0x20
  1306. typedef struct {
  1307.     bdaddr_t    bdaddr;
  1308.     uint8_t        pscan_rep_mode;
  1309. } __attribute__ ((packed)) evt_pscan_rep_mode_change;
  1310. #define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7
  1311.  
  1312. #define EVT_FLOW_SPEC_COMPLETE        0x21
  1313. typedef struct {
  1314.     uint8_t        status;
  1315.     uint16_t    handle;
  1316.     uint8_t        flags;
  1317.     uint8_t        direction;
  1318.     hci_qos        qos;
  1319. } __attribute__ ((packed)) evt_flow_spec_complete;
  1320. #define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)
  1321.  
  1322. #define EVT_INQUIRY_RESULT_WITH_RSSI    0x22
  1323. typedef struct {
  1324.     bdaddr_t    bdaddr;
  1325.     uint8_t        pscan_rep_mode;
  1326.     uint8_t        pscan_period_mode;
  1327.     uint8_t        dev_class[3];
  1328.     uint16_t    clock_offset;
  1329.     int8_t        rssi;
  1330. } __attribute__ ((packed)) inquiry_info_with_rssi;
  1331. #define INQUIRY_INFO_WITH_RSSI_SIZE 14
  1332. typedef struct {
  1333.     bdaddr_t    bdaddr;
  1334.     uint8_t        pscan_rep_mode;
  1335.     uint8_t        pscan_period_mode;
  1336.     uint8_t        pscan_mode;
  1337.     uint8_t        dev_class[3];
  1338.     uint16_t    clock_offset;
  1339.     int8_t        rssi;
  1340. } __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;
  1341. #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 15
  1342.  
  1343. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE    0x23
  1344. typedef struct {
  1345.     uint8_t        status;
  1346.     uint16_t    handle;
  1347.     uint8_t        page_num;
  1348.     uint8_t        max_page_num;
  1349.     uint8_t        features[8];
  1350. } __attribute__ ((packed)) evt_read_remote_ext_features_complete;
  1351. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13
  1352.  
  1353. #define EVT_SYNC_CONN_COMPLETE        0x2C
  1354. typedef struct {
  1355.     uint8_t        status;
  1356.     uint16_t    handle;
  1357.     bdaddr_t    bdaddr;
  1358.     uint8_t        link_type;
  1359.     uint8_t        trans_interval;
  1360.     uint8_t        retrans_window;
  1361.     uint16_t    rx_pkt_len;
  1362.     uint16_t    tx_pkt_len;
  1363.     uint8_t        air_mode;
  1364. } __attribute__ ((packed)) evt_sync_conn_complete;
  1365. #define EVT_SYNC_CONN_COMPLETE_SIZE 17
  1366.  
  1367. #define EVT_SYNC_CONN_CHANGED        0x2D
  1368. typedef struct {
  1369.     uint8_t        status;
  1370.     uint16_t    handle;
  1371.     uint8_t        trans_interval;
  1372.     uint8_t        retrans_window;
  1373.     uint16_t    rx_pkt_len;
  1374.     uint16_t    tx_pkt_len;
  1375. } __attribute__ ((packed)) evt_sync_conn_changed;
  1376. #define EVT_SYNC_CONN_CHANGED_SIZE 9
  1377.  
  1378. #define EVT_SNIFF_SUBRATE        0x2E
  1379. typedef struct {
  1380.     uint8_t        status;
  1381.     uint16_t    handle;
  1382.     uint16_t    max_remote_latency;
  1383.     uint16_t    max_local_latency;
  1384.     uint16_t    min_remote_timeout;
  1385.     uint16_t    min_local_timeout;
  1386. } __attribute__ ((packed)) evt_sniff_subrate;
  1387. #define EVT_SNIFF_SUBRATE_SIZE 11
  1388.  
  1389. #define EVT_EXTENDED_INQUIRY_RESULT    0x2F
  1390. typedef struct {
  1391.     bdaddr_t    bdaddr;
  1392.     uint8_t        pscan_rep_mode;
  1393.     uint8_t        pscan_period_mode;
  1394.     uint8_t        dev_class[3];
  1395.     uint16_t    clock_offset;
  1396.     int8_t        rssi;
  1397.     uint8_t        data[240];
  1398. } __attribute__ ((packed)) extended_inquiry_info;
  1399. #define EXTENDED_INQUIRY_INFO_SIZE 254
  1400.  
  1401. #define EVT_TESTING            0xFE
  1402.  
  1403. #define EVT_VENDOR            0xFF
  1404.  
  1405. /* Internal events generated by BlueZ stack */
  1406. #define EVT_STACK_INTERNAL        0xFD
  1407. typedef struct {
  1408.     uint16_t    type;
  1409.     uint8_t        data[0];
  1410. } __attribute__ ((packed)) evt_stack_internal;
  1411. #define EVT_STACK_INTERNAL_SIZE 2
  1412.  
  1413. #define EVT_SI_DEVICE    0x01
  1414. typedef struct {
  1415.     uint16_t    event;
  1416.     uint16_t    dev_id;
  1417. } __attribute__ ((packed)) evt_si_device;
  1418. #define EVT_SI_DEVICE_SIZE 4
  1419.  
  1420. #define EVT_SI_SECURITY    0x02
  1421. typedef struct {
  1422.     uint16_t    event;
  1423.     uint16_t    proto;
  1424.     uint16_t    subproto;
  1425.     uint8_t        incoming;
  1426. } __attribute__ ((packed)) evt_si_security;
  1427.  
  1428. /* --------  HCI Packet structures  -------- */
  1429. #define HCI_TYPE_LEN    1
  1430.  
  1431. typedef struct {
  1432.     uint16_t    opcode;        /* OCF & OGF */
  1433.     uint8_t        plen;
  1434. } __attribute__ ((packed))    hci_command_hdr;
  1435. #define HCI_COMMAND_HDR_SIZE     3
  1436.  
  1437. typedef struct {
  1438.     uint8_t        evt;
  1439.     uint8_t        plen;
  1440. } __attribute__ ((packed))    hci_event_hdr;
  1441. #define HCI_EVENT_HDR_SIZE     2
  1442.  
  1443. typedef struct {
  1444.     uint16_t    handle;        /* Handle & Flags(PB, BC) */
  1445.     uint16_t    dlen;
  1446. } __attribute__ ((packed))    hci_acl_hdr;
  1447. #define HCI_ACL_HDR_SIZE     4
  1448.  
  1449. typedef struct {
  1450.     uint16_t    handle;
  1451.     uint8_t        dlen;
  1452. } __attribute__ ((packed))    hci_sco_hdr;
  1453. #define HCI_SCO_HDR_SIZE     3
  1454.  
  1455. typedef struct {
  1456.     uint16_t    device;
  1457.     uint16_t    type;
  1458.     uint16_t    plen;
  1459. } __attribute__ ((packed))    hci_msg_hdr;
  1460. #define HCI_MSG_HDR_SIZE    6
  1461.  
  1462. /* Command opcode pack/unpack */
  1463. #define cmd_opcode_pack(ogf, ocf)    (uint16_t)((ocf & 0x03ff)|(ogf << 10))
  1464. #define cmd_opcode_ogf(op)        (op >> 10)
  1465. #define cmd_opcode_ocf(op)        (op & 0x03ff)
  1466.  
  1467. /* ACL handle and flags pack/unpack */
  1468. #define acl_handle_pack(h, f)    (uint16_t)((h & 0x0fff)|(f << 12))
  1469. #define acl_handle(h)        (h & 0x0fff)
  1470. #define acl_flags(h)        (h >> 12)
  1471.  
  1472. #endif /* _NO_HCI_DEFS */
  1473.  
  1474. /* HCI Socket options */
  1475. #define HCI_DATA_DIR    1
  1476. #define HCI_FILTER    2
  1477. #define HCI_TIME_STAMP    3
  1478.  
  1479. /* HCI CMSG flags */
  1480. #define HCI_CMSG_DIR    0x0001
  1481. #define HCI_CMSG_TSTAMP    0x0002
  1482.  
  1483. struct sockaddr_hci {
  1484.     sa_family_t    hci_family;
  1485.     unsigned short    hci_dev;
  1486. };
  1487. #define HCI_DEV_NONE    0xffff
  1488.  
  1489. struct hci_filter {
  1490.     uint32_t type_mask;
  1491.     uint32_t event_mask[2];
  1492.     uint16_t opcode;
  1493. };
  1494.  
  1495. #define HCI_FLT_TYPE_BITS    31
  1496. #define HCI_FLT_EVENT_BITS    63
  1497. #define HCI_FLT_OGF_BITS    63
  1498. #define HCI_FLT_OCF_BITS    127
  1499.  
  1500. /* Ioctl requests structures */
  1501. struct hci_dev_stats {
  1502.     uint32_t err_rx;
  1503.     uint32_t err_tx;
  1504.     uint32_t cmd_tx;
  1505.     uint32_t evt_rx;
  1506.     uint32_t acl_tx;
  1507.     uint32_t acl_rx;
  1508.     uint32_t sco_tx;
  1509.     uint32_t sco_rx;
  1510.     uint32_t byte_rx;
  1511.     uint32_t byte_tx;
  1512. };
  1513.  
  1514. struct hci_dev_info {
  1515.     uint16_t dev_id;
  1516.     char     name[8];
  1517.  
  1518.     bdaddr_t bdaddr;
  1519.  
  1520.     uint32_t flags;
  1521.     uint8_t  type;
  1522.  
  1523.     uint8_t  features[8];
  1524.  
  1525.     uint32_t pkt_type;
  1526.     uint32_t link_policy;
  1527.     uint32_t link_mode;
  1528.  
  1529.     uint16_t acl_mtu;
  1530.     uint16_t acl_pkts;
  1531.     uint16_t sco_mtu;
  1532.     uint16_t sco_pkts;
  1533.  
  1534.     struct   hci_dev_stats stat;
  1535. };
  1536.  
  1537. struct hci_conn_info {
  1538.     uint16_t handle;
  1539.     bdaddr_t bdaddr;
  1540.     uint8_t  type;
  1541.     uint8_t     out;
  1542.     uint16_t state;
  1543.     uint32_t link_mode;
  1544. };
  1545.  
  1546. struct hci_dev_req {
  1547.     uint16_t dev_id;
  1548.     uint32_t dev_opt;
  1549. };
  1550.  
  1551. struct hci_dev_list_req {
  1552.     uint16_t dev_num;
  1553.     struct hci_dev_req dev_req[0];    /* hci_dev_req structures */
  1554. };
  1555.  
  1556. struct hci_conn_list_req {
  1557.     uint16_t dev_id;
  1558.     uint16_t conn_num;
  1559.     struct hci_conn_info conn_info[0];
  1560. };
  1561.  
  1562. struct hci_conn_info_req {
  1563.     bdaddr_t bdaddr;
  1564.     uint8_t  type;
  1565.     struct hci_conn_info conn_info[0];
  1566. };
  1567.  
  1568. struct hci_inquiry_req {
  1569.     uint16_t dev_id;
  1570.     uint16_t flags;
  1571.     uint8_t  lap[3];
  1572.     uint8_t  length;
  1573.     uint8_t  num_rsp;
  1574. };
  1575. #define IREQ_CACHE_FLUSH 0x0001
  1576.  
  1577. struct hci_remotename_req {
  1578.     uint16_t dev_id;
  1579.     uint16_t flags;
  1580.     bdaddr_t bdaddr;
  1581.     uint8_t  name[248];
  1582. };
  1583.  
  1584. #ifdef __cplusplus
  1585. }
  1586. #endif
  1587.  
  1588. #endif /* __HCI_H */
  1589.